/*
 * CourseTeachersIterator.h
 *
 *  Created on: 10 May 2010
 *      Author: Savramis Sartios
 */

#ifndef COURSETEACHERSITERATOR_H_
#define COURSETEACHERSITERATOR_H_
#include "../List/ICourseTeachersList.h"
/*#include "ICourseTeachersIterator.h"*/

class CourseTeachersIterator: public ICourseTeachersIterator {
public:
	CourseTeachersIterator(const ICourseTeachersList *list);
	virtual ~CourseTeachersIterator();
	/**
		 * Ξεκινά από το πρώτο στοιχείο της δομής
		 */
		virtual void first();

		/**
		 * Πηγαίνει στο επόμενο στοιχείο της δομής
		 */
		virtual void next();

		/**
		 * Ελέγχει έαν η δομή έφτασε στο τέλος της
		 * \return false εάν βρισκόμαστε μέσα στα όρια της δομής
		 */
		virtual bool isDone();

		/**
		 * Επιστρέφει έναν κωδικό καθηγητή για το μάθημα στο οποίο βρίσκεται ο current
		 * \return string * ο κωδικός του καθηγητή
		 */
		virtual string	 getTeacher();

		/**
		 * Επιστρέφει τον κωδικό του μαθήματος του στοιχείου που προσπελαύνεται την κάθε στιγμή
		 * \return string * ο κωδικός του μαθήματος
		 */
		virtual string	 getCourse();

		virtual bool teacherIsLast();

private:

		bool setList(const ICourseTeachersList *list);
		ICourseTeachersList *list_;
		int course_;
		int teacher_;
		map<string,vector<string> >::iterator it_;
};

#endif /* COURSETEACHERSITERATOR_H_ */
